import Scanner from './Scanner.js'
import nestTokens from './nestTokens'

export default function parseTemplateToTokens(templateStr) {
  var tokens = []
  // 创建扫描器实例
  var scanner = new Scanner(templateStr)
  // 收集返回的文字
  var words = ''
  // 循环扫描模板字符串获取关键词
  while (!scanner.isEnd()) {
    // 收集 {{ 之前的text型文字并加到tokens中
    words = scanner.scanUntil('{{')
    if (words) {
      // 去掉多余空格
      let isInJJH = false
      var _words = ''
      for (let i = 0; i < words.length; i++) {
        // 判断是否在标签中
        if (words[i] == '<') {
          isInJJH = true
        } else if (words[i] == '>') {
          isInJJH = false
        }
        // 去除多余空格
        if (!/\s/.test(words[i])) {
          _words += words[i]
        } else {
          if (isInJJH) {
            _words += ' '
          }
        }
      }

      tokens.push(['text', _words])
    }
    scanner.scan('{{')

    // 收集 }} 之前的name型文字进行分类，并加到tokens中
    words = scanner.scanUntil('}}')
    if (words) {
      if (words.trim()[0] === '#') {
        // 单词首字母为#的处理
        tokens.push(['#', words.trim().substr(1)])
      } else if (words.trim()[0] === '/') {
        // 单词首字母为/的处理
        tokens.push(['/', words.trim().substr(1)])
      } else {
        // 正常处理
        tokens.push(['name', words.trim()])
      }
    }
    scanner.scan('}}')
  }
  // 返回嵌套处理后的tokens
  return nestTokens(tokens)
}
